書籍「Tableauデータ分析 ~入門から実践まで~」8章のグラフ再現に挑戦してみた
初めまして、今回初投稿のしょうのです。
現在、書籍「Tableauデータ分析 ~入門から実践まで~」を読みながらTableauの勉強中です。この書籍は初心者にも非常にわかりやすい内容であるにもかかわらず中身はとても濃く……といったことは別の方が既に書かれているので、気になる方は是非こちらの記事をお読みください。
この本では7章までに基本的な操作方法がまとまっており、8章では前年度と比べて事務用品の利益が下がっている原因をTableauを利用して絞り込んでいく流れが説明されています。
私は勉強の際7章の基本機能の説明まで読んだ後少し時間が空いてしまい、いざ8章の実践的な内容を読み始めると載っているグラフの作り方が全然わからない!という状態になってしまったため、復習がてらできる範囲で再現に挑戦してみました。手順を全部記すと長くなるので手こずった点を書いてみます。
書籍のデータと私が使用したデータは微妙に異なるようで、数値や年などに違いがありますのでご了承ください。
いつ?利益トレンド
まずは図8-5 利益減少の要素分解のダッシュボードのいつ?利益トレンドです。
昨年(2015年)に比べていつ利益が減少しているのかをグラフで可視化しています。6月と11月の差が大きそうです。
今回は2015、2016年の事務用品についてのグラフが見たいので、全てのグラフのフィルターに年(出荷日)とカテゴリを追加してデータを絞っています。
このグラフでは違う年のグラフを重ねて表示したいわけですが、列から年(出荷日)と四半期(出荷日)のピルを外して月(出荷日)のみにするという方法が中々思いつきませんでした。
年を外すだけでは全ての年の各月の利益合計がグラフになってしまいますが、マークの色に年を設定することで年ごとに表示されます。列、行のピルだけでなくマークに追加したピルでもデータの粒度を変えられるというのは意識する必要がありそうです。
グラフの色はマークシェルフの色>色の編集から変更しました。列や行のメモリの単位や有効数字などはピルを右クリック>書式設定から変更できます。
どこで? 地域と利益
こちらは去年に比べて利益が減少した地域を示すグラフです。明らかに関西地方の売り上げが落ちています。
書籍のグラフから推測するに前年度から利益が下がっている場合赤い点にしているようでしたので、以下の計算フィールドをメジャーに追加しマークの色に設定しました。マークの色の編集から真のとき赤、偽の時青となるようにしています。
利益前年度比増減:ATTR(DATEPART('year', [出荷日]))=2016 AND (SUM([利益])- LOOKUP(SUM([利益]),-1))
後半の条件だけでは例えば2015年関東地方の利益は直前のデータである2016年関西地方の利益(LOOKUP(SUM([利益]),-1))より低いので赤くなってしまいます。そのため苦肉の策でDATEPART('year', [出荷日]))=2016を条件に加えました。非常に汎用性が低いやり方なのでもっといい方法が思いつき次第更新します。
グラフの線の色については再現ができませんでした…… 本当は青から赤へのグラデーションではなく線の部分は灰色一色にしたかったのですが、マークの色の編集には項目がなく断念しました。なにが、誰がのグラフでも同様に妥協しています。やり方わかり次第更新します。
グラフの線の両端に点を付けるにはマークの色からマーカーのすべて(真ん中)を選択します。
なにが? 製品別利益・誰が? 顧客区分と利益
製品のカテゴリごと、及び顧客区分ごとに利益の増減を表示させています。
アプライアンス商品の利益減少、BtoB取引の利益減少が見て取れます。
これらで手こずった点はどこで?地域と利益とほぼ一緒なので割愛します。列に追加する項目が違うだけです。妥協点も同様です。
利益の分解
利益が減っている原因を明らかにするための表です。
利益が減っている原因は費用の上昇ではなく売り上げの減少である → 売り上げの減少の原因は販売数の減少ではなく販売価格の低下である → 販売価格の低下は割引をした取引の増加によって起こっている
といった事柄を示しています。
図8-3、8-7、8-8、は8-9の一部なので割愛します。
行にディメンションのメジャーネームを、マークのテキストにメジャーのメジャーバリューを設定します。
メジャーネームには全てのメジャーの名前が、メジャーバリューには全てのメジャーの値が集められています。この表のように大量の項目の集計を並列で表示したい場合には便利そうです。
前年差や前年比、割引額等は計算フィールドで作成しました。苦労した項目だけピックアップしてみます。
利益の前年差
ZN(SUM([利益]) - LOOKUP(SUM([利益]), -1))
前年差はみなこのパターンです。LOOKUP関数は現在の行から第二引数で指定した値だけ+した行の第一引数の式の計算結果を返してくれます。
LOOKUP(ZN(SUM([利益])), -1)で前の行(2016年のデータなら2015年)の利益の合計が得られるので、今の行の利益の合計との差を求めています。
ZNはnullを渡すと0を、それ以外ならばそのまま返す関数です。
2015年の前の行である2014年のデータはフィルターで絞られているため存在しません。よって2015年におけるLOOKUP(SUM([利益]), -1)はnullを返し、SUM([利益])-nullもnullを返します。書籍の表ではこのケースは0と表示されているので、ZN関数を使うことで0を表示させています。
平均価格の前年比
平均価格:AVG([売上]/[数量])
売上数(数量)は増えているのに利益が落ちていることの原因を探っているので、ここでの平均価格とは注文1回ごとの平均ではなく商品1つごとの平均です。よって注文ごとの売上を数量で割ったものの平均を出しています。
平均価格の前年比:ZN(([平均価格] / LOOKUP([平均価格], -1))-1)
前年比は前年差と同様にLOOKUPで前の年の値を取得して計算するだけです。他の項目の前年比も同じパターンです。
ちなみに書式設定から表示形式をパーセンテージにすれば自動で100倍されるので、計算式で100をかける必要はありません。
割引をした取引数
SUM(IF [割引率]>0 THEN 1 ELSE 0 END)
割引率が0より大きいレコードの合計を求める計算フィールドです。COUNT(IF [割引率]>0 THEN '1' ELSE null END)でもいいようです。
感想
まだグラフはありますが、残りは難易度が上がり長くなってしまいそうなのでここまでとします。機会があれば続きも書いてみたいと思います。
本を読みながらグラフを作っている間はあまりに操作が直感的なので勉強なんてしなくても使えるんじゃないかと思ってしまいましたが、いざ自分でグラフを作ってみると相応に頭を使わなければ使いこなせないということを思い知りました。
せっかくいい本に巡り合えたので、しっかり読み込んで業務につなげていきたいです。